package com.lengxf.pay.wx.bean;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.XmlUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.SignAlgorithm;
import com.lengxf.pay.common.bean.Param;
import lombok.Data;

import java.util.Map;

@Data
public class BarcodeReq implements Param {

    //公众账号ID
    private String appid;

    //商户号
    private String mchId;

    //设备号 非必填
    private String deviceInfo;

    //随机字符串
    private String nonceStr;

    //签名
    private String sign;

    //签名类型 非必填 默认 MD5
    private String signType = "MD5";

    //商品描述
    private String body;

    //商品详情 非必填
    private String detail;

    //附加数据 非必填
    private String attach;

    //商户订单号
    private String outTradeNo;

    //订单金额
    private String totalFee;

    //货币类型 非必填
    private String feeType = "CNY";

    //终端IP
    private String spbillCreateIp;

    //订单优惠标记 非必填
    private String goodsTag;

    //指定支付方式 非必填
    private String limitPay;

    //交易起始时间 非必填
    private String timeStart;

    //交易结束时间 非必填
    private String timeExpire;

    //电子发票入口开放标识 非必填
    private String receipt;

    //付款码
    private String authCode;

    //是否需要分账 非必填
    private String profitSharing;

    //场景信息 非必填
    private String sceneInfo;

    @Override
    public String toXml() {
        Map<String, Object> map = BeanUtil.beanToMap(this, true, true);
        return XmlUtil.mapToXmlStr(map, "xml", null, true);
    }


    public void sign(String apiV2Key) {
        String signStr = SecureUtil.sign(SignAlgorithm.MD5withRSA).signHex(this.toKvStr() + "&key=" + apiV2Key);
        this.setSign(signStr);
    }

}
